{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Logistic Regression\n",
    "\n",
    "This function shows how to use TensorFlow to solve logistic regression.\n",
    "$ \\textbf{y} = sigmoid(\\textbf{A}\\times \\textbf{x} + \\textbf{b})$\n",
    "\n",
    "We will use the low birth weight data, specifically:\n",
    "```\n",
    "#  y = 0 or 1 = low birth weight\n",
    "#  x = demographic and medical history data\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "import requests\n",
    "from tensorflow.python.framework import ops\n",
    "import os.path\n",
    "import csv"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "ops.reset_default_graph()\n",
    "\n",
    "# Create graph\n",
    "sess = tf.Session()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Obtain and prepare data for modeling"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# name of data file\n",
    "birth_weight_file = 'birth_weight.csv'\n",
    "\n",
    "# download data and create data file if file does not exist in current directory\n",
    "if not os.path.exists(birth_weight_file):\n",
    "    \n",
    "    birthdata_url = 'https://github.com/nfmcclure/tensorflow_cookbook/' + \\\n",
    "    'raw/master/01_Introduction/07_Working_with_Data_Sources/birthweight_data/birthweight.dat'\n",
    "    birth_file = requests.get(birthdata_url)\n",
    "    birth_data = birth_file.text.split('\\r\\n')\n",
    "    birth_header = birth_data[0].split('\\t')\n",
    "    birth_data = [[float(x) for x in y.split('\\t') if len(x)>=1] for y in birth_data[1:] if len(y)>=1]\n",
    "    with open(birth_weight_file, \"w\") as f:\n",
    "        writer = csv.writer(f)\n",
    "        writer.writerow(birth_header)\n",
    "        writer.writerows(birth_data)\n",
    "        f.close()\n",
    "\n",
    "# read birth weight data into memory\n",
    "birth_data = []\n",
    "with open(birth_weight_file, newline='') as csvfile:\n",
    "     csv_reader = csv.reader(csvfile)\n",
    "     birth_header = next(csv_reader)\n",
    "     for row in csv_reader:\n",
    "         birth_data.append(row)\n",
    "\n",
    "birth_data = [[float(x) for x in row] for row in birth_data]\n",
    "\n",
    "# Pull out target variable\n",
    "y_vals = np.array([x[0] for x in birth_data])\n",
    "# Pull out predictor variables (not id, not target, and not birthweight)\n",
    "x_vals = np.array([x[1:8] for x in birth_data])\n",
    "\n",
    "# set for reproducible results\n",
    "seed = 99\n",
    "np.random.seed(seed)\n",
    "tf.set_random_seed(seed)\n",
    "\n",
    "# Split data into train/test = 80%/20%\n",
    "train_indices = np.random.choice(len(x_vals), round(len(x_vals)*0.8), replace=False)\n",
    "test_indices = np.array(list(set(range(len(x_vals))) - set(train_indices)))\n",
    "x_vals_train = x_vals[train_indices]\n",
    "x_vals_test = x_vals[test_indices]\n",
    "y_vals_train = y_vals[train_indices]\n",
    "y_vals_test = y_vals[test_indices]\n",
    "\n",
    "# Normalize by column (min-max norm)\n",
    "def normalize_cols(m):\n",
    "    col_max = m.max(axis=0)\n",
    "    col_min = m.min(axis=0)\n",
    "    return (m-col_min) / (col_max - col_min)\n",
    "    \n",
    "x_vals_train = np.nan_to_num(normalize_cols(x_vals_train))\n",
    "x_vals_test = np.nan_to_num(normalize_cols(x_vals_test))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Define Tensorflow computational graph"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Declare batch size\n",
    "batch_size = 25\n",
    "\n",
    "# Initialize placeholders\n",
    "x_data = tf.placeholder(shape=[None, 7], dtype=tf.float32)\n",
    "y_target = tf.placeholder(shape=[None, 1], dtype=tf.float32)\n",
    "\n",
    "# Create variables for linear regression\n",
    "A = tf.Variable(tf.random_normal(shape=[7,1]))\n",
    "b = tf.Variable(tf.random_normal(shape=[1,1]))\n",
    "\n",
    "# Declare model operations\n",
    "model_output = tf.add(tf.matmul(x_data, A), b)\n",
    "\n",
    "# Declare loss function (Cross Entropy loss)\n",
    "loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=model_output, labels=y_target))\n",
    "\n",
    "# Declare optimizer\n",
    "my_opt = tf.train.GradientDescentOptimizer(0.01)\n",
    "train_step = my_opt.minimize(loss)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Train model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Loss = 0.845124\n",
      "Loss = 0.658061\n",
      "Loss = 0.471852\n",
      "Loss = 0.643469\n",
      "Loss = 0.672077\n"
     ]
    }
   ],
   "source": [
    "# Initialize variables\n",
    "init = tf.global_variables_initializer()\n",
    "sess.run(init)\n",
    "\n",
    "# Actual Prediction\n",
    "prediction = tf.round(tf.sigmoid(model_output))\n",
    "predictions_correct = tf.cast(tf.equal(prediction, y_target), tf.float32)\n",
    "accuracy = tf.reduce_mean(predictions_correct)\n",
    "\n",
    "# Training loop\n",
    "loss_vec = []\n",
    "train_acc = []\n",
    "test_acc = []\n",
    "for i in range(1500):\n",
    "    rand_index = np.random.choice(len(x_vals_train), size=batch_size)\n",
    "    rand_x = x_vals_train[rand_index]\n",
    "    rand_y = np.transpose([y_vals_train[rand_index]])\n",
    "    sess.run(train_step, feed_dict={x_data: rand_x, y_target: rand_y})\n",
    "\n",
    "    temp_loss = sess.run(loss, feed_dict={x_data: rand_x, y_target: rand_y})\n",
    "    loss_vec.append(temp_loss)\n",
    "    temp_acc_train = sess.run(accuracy, feed_dict={x_data: x_vals_train, y_target: np.transpose([y_vals_train])})\n",
    "    train_acc.append(temp_acc_train)\n",
    "    temp_acc_test = sess.run(accuracy, feed_dict={x_data: x_vals_test, y_target: np.transpose([y_vals_test])})\n",
    "    test_acc.append(temp_acc_test)\n",
    "    if (i+1)%300==0:\n",
    "        print('Loss = ' + str(temp_loss))\n",
    "        "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Display model performance"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nXfyibDvokpISmjdvzg8//BCpHv86Eu/Z5zIz56qrrsqqfP369QPHaqIoBYBff/01KS+qQnvkkUfS\nuo6yefs3S8EwXLbZZpuCLOqC5B3fPKKOC2y11VZstdVWFd4MvXGAMPxumFz25t5+++3ztlLCLIXr\nrrsubblMiAhnnHFG4jhTPf6tV71nH/X79Y8jZDueM3DgwMB0v5JKxX8/69evTxyramKxo/e9BP1v\ngTOxIWjdzcSJE6tcDClTCkatQlW59tprK6TnG1Pmq6++ijSrZPny5SxdujSnvblLSkp44403QiOc\n5uP28UeTTR2b6NatW1b1epxyyil07dqVnXfeGdjSwTZo0CARMt1Lq1OnTmJa7R577JG2zsGDByeO\n/d/bySefnFGedJ1/mKsunZJTVUaOHMlNN93EIYccAjjRZ7OJA3X44YebpWAYVZF8lUKjRo0izT9v\n1qxZJKsiiNLSUvbcc0/++c9/cu6550a6JtOYQjr3UeqsnjfffDPQ7RK0p4K/zaZNm/Lee+8FzmDy\nynnPfvPmzQwZMgRVTbsHhlcuqK0nnngi7TUAkyZNSlJ8o0aNShyHhQFP1xF78cEGDx6cKLP11ltX\nWIyYCbMUDKMKUhnRJ/PFL6O/QwsjtcPp3r170nnUhWR16tQJHNN59913effdd4FwKyUsz68UPHm9\njv/II4/kgw8+SCrvXyWdqUP1zwraZ599aNCgAdOnT2fChAmBivXYY4+tkBamFApBVbMUbKDZqPa8\n+uqrTJgwIa86qtrbWhC5yOhN0b322mvp1atX0lRTyH91cYsWLSpYPlHl9DpVzx/vD0bojS/stdde\ndOnSJem6bJSCf7W5p3z8M7Q++OADZs+enTgfN24c48eP58QTT8z6frKhRYsWiXusav97phSMas8f\n//hH/vjHPxZbjNho1qwZP/74Y06dR9OmTVm3bh1lZWWB1xeyQ/I69caNG7Nq1arI17Vp04arr746\nqQM/+eSTWbx4ceACuDClUF5ezqeffkrfvn0rXBd0r126dElSOnXr1q3gEvNfd+yxx/LCCy8A4ZaC\nt3I53XTTJUuWJI532223wDJBwfZsTMEwDD788EMeeuihrK7xdx716tWrlM5k6NCh3HXXXZx11lkV\n8rzZRtttt10iba+99uLAAw9kxIgRnH/++bRq1SqRV1JSwoUXXlhhYLhz585JIUpSO81OnToFtu/V\nGYV99tmHyZMnc8455wDJz/L5559PjK2EKYXDDz+c3r17p80vKSlJyDN06FBefvnlpJlN4IQ5uf32\n25PSTCkYRsz4p0Zmy0UXXZSYhhkn7du3z7qdbP3de+65Z+ZCGSgrK+P8888PdEldd911lJeXJ80q\nqlevHu+//37oDnqpfPjhh3Tt2jXhekl3n2+//XZirMMjmw714IMPDgyhISKUlZVx3HHH8eKLL0au\nL4zS0lJ69uxZob1CL5KMirmPjFrN66+/zsKFC3O6NjUqaWXz7rvvMmfOnKQ3Y2+bTL9/PhPTp08v\n2Nar6ahbt25O03A9GjRowM8//5w4HzduHDfeeGPatQ3eFFE/2U4m8Aa7U68TEZ577rms6orK999/\nn2RNpbYdFJiv0JilYNRqGjduXJC35GJw0EEHVQhjff311zNu3Dh+//vfR66nY8eOWSmRYjBjxgye\nfPLJxHnPnj15/fXXs+ros3W9eG6qww47LKvr8iF11XOqzEFTgAuNWQqGUYOoV68exx9/fFFl8Dqu\nQnZg7du3rzBzKluytRS6d+9esGmnudKzZ+AOxbFiSsEwjILSp08f2rZtm9VYQWVQ1aZ+RqF9+/YV\nQnTHjSkFwzAKiohw0EEHFVuMChRDKSxYsCDrPbpnzJhR1I14TCkYhhHITjvtxDfffFNsMQpGMVat\n77zzzom4T1HZZ599YpImGqYUDMMIZNasWWzYsKHYYhSM6ug+KgamFAyjmvPKK6/QsGHDgtfrhQmv\nKZhSiIYpBcOo5uS7FWVtwZRCNGydgmEYNZooIc2NLZilYBhGjWbq1KkVwm8b6TGlYBhGjaZdu3aJ\n8B9GZsx9ZBiGYSQwpWAYhmEkMPeRYRhGFeepp56qtOnBphQMwzCqOP7tQePG3EeGYRhGgliVgoj0\nFJHZIjJXRIaFlDtRRFREct8GyzAMw8ib2JSCiJQCdwFHAXsCfUSkwm4mItII+DswJS5ZDMMwjGjE\naSkcAMxV1Xmquh54DOgVUO6fwPXAuhhlMQzDMCIQp1LYEfjWd77QTUsgIr8D2qhq6A7YItJfRMpF\npLyYccYNwzBqOkUbaBaREuBmYEimsqo6SlU7q2rnFi1axC+cYRhGLSVOpbAIaOM7b+2meTQC9gYm\nicgC4EDgeRtsNgzDKB5xKoUPgV1FpJ2IlAG9gee9TFVdparNVbWtqrYFPgCOU9XyGGUyDMMwQoht\n8ZqqbhSRC4AJQClwn6p+LiJXA+Wq+nx4DcFMmzbtBxH5OkexmgM/5HhtZWEy5k9Vlw+qvoxVXT4w\nGbMl0r6goqpxC1JlEJFyVa3S7imTMX+qunxQ9WWs6vKByRgXtqLZMAzDSGBKwTAMw0hQ25TCqGIL\nEAGTMX+qunxQ9WWs6vKByRgLtWpMwTAMwwintlkKhmEYRgimFAzDMIwEtUYpRA3jHbMMbUTkTRGZ\nKSKfi8jf3fRmIvKaiMxx/zZ100VEbndlnuHGiqosWUtF5GMRecE9byciU1xZHncXJCIi9dzzuW5+\n20qSbxsReUpEZonIFyLStSo9RxH5X/c7/kxExopI/WI/QxG5T0SWishnvrSsn5mI/NUtP0dE/loJ\nMt7ofs8zROQZEdnGl3epK+NsEenhS4/l9x4kny9viDhbADR3z4vyDPNGVWv8B2fx3FdAe6AM+ATY\nswhy7AD8zj1uBHyJE1b8BmCYmz4MuN49Php4GRCcMCBTKlHWwcCjwAvu+RNAb/f4HuA89/h84B73\nuDfweCXJ9yDQzz0uA7apKs8RJ/DjfGAr37M7q9jPEPg98DvgM19aVs8MaAbMc/82dY+bxizjkUAd\n9/h6n4x7ur/lekA79zdeGufvPUg+N70NzkLdr4HmxXyGed9jsQWolJuErsAE3/mlwKVVQK7ngD8C\ns4Ed3LQdgNnu8Uigj698olzMcrUGXgf+ALzg/lP/4PthJp6n+0Po6h7XcctJzPI1cTtdSUmvEs+R\nLRGCm7nP5AWgR1V4hkDblA43q2cG9AFG+tKTysUhY0re8cAj7nHS79h7jnH/3oPkA54COgIL2KIU\nivYM8/nUFvdRxjDelY3rIvgtzuZC26nqYjdrCbCde1wsuW8FLgE2u+fbAitVdWOAHAkZ3fxVbvk4\naQcsA+53XVz/FZEGVJHnqKqLgP8A3wCLcZ7JNKrWM/TI9pkV+7d0Ns7bNyGyVKqMItILWKSqn6Rk\nVQn5sqW2KIUqhYg0BJ4GLlTVn/x56rw6FG2esIgcCyxV1WnFkiECdXBM+LtV9bfAzziujwTFfI6u\nX74XjvJqBTQAehZDlmwo9v9eJkTkMmAj8EixZfEQka2B/wOuKLYshaK2KIVMYbwrDRGpi6MQHlHV\ncW7y9yKyg5u/A7DUTS+G3AcDx4kTzvwxHBfSbcA2IuIFUPTLkZDRzW8CLI9ZxoXAQlX1tnB9CkdJ\nVJXneAQwX1WXqeoGYBzOc61Kz9Aj22dWlN+SiJwFHAuc5iqvqiJjBxzl/4n7m2kNfCQi21cR+bKm\ntglG9N4AAAQOSURBVCiF0DDelYWICHAv8IWq3uzLeh7wZiD8FWeswUs/053FcCCwymfqx4KqXqqq\nrdUJZ94beENVTwPeBE5KI6Mn+0lu+VjfNlV1CfCtiOzuJh0OzKTqPMdvgANFZGv3O/fkqzLP0Ee2\nz2wCcKSINHUtoiPdtNgQkZ447szjVPWXFNl7u7O32gG7AlOpxN+7qn6qqi11yxYAC3EmkyyhCj3D\nrCj2oEZlfXBmAnyJMyvhsiLJ0A3HPJ8BTHc/R+P4j18H5gATgWZueQHucmX+FOhcyfIeypbZR+1x\nfnBzgSeBem56ffd8rpvfvpJk2w8od5/lszizOKrMcwSuAmYBnwEP48yQKeozBMbijHFswOm8zsnl\nmeH49ee6n76VIONcHB+895u5x1f+MlfG2cBRvvRYfu9B8qXkL2DLQHNRnmG+HwtzYRiGYSSoLe4j\nwzAMIwKmFAzDMIwEphQMwzCMBKYUDMMwjASmFAzDMIwEphSMGo+IbCcij4rIPBGZJiLvi8jxRZLl\nUBE5yHc+QETOLIYshhFEncxFDKP64i4eexZ4UFVPddN2Bo6Lsc06uiXGUSqHAmuA9wBU9Z645DCM\nXLB1CkaNRkQOB65Q1e4BeaXAdTgddT3gLlUdKSKHAsNxopXujRPM7nRVVRHpBNwMNHTzz1LVxSIy\nCWdhVTecBU5fAv/ACd28HDgN2Ar4ANiEE9BvEM5q5zWq+h8R2Q8npPbWOAuezlbVFW7dU4DDcEKE\nn6Oq7xTuKRnGFsx9ZNR09gI+SpN3Dk7ogf2B/YFz3XAJ4ESwvRAnZn974GA3btUdwEmq2gm4D/iX\nr74yVe2sqjcBk4ED1QnY9xhwiaouwOn0b1HV/QI69oeAoaq6L84K2Ct9eXVU9QBXpisxjJgw95FR\nqxCRu3De5tfjbIiyr4h48Yia4MTPWQ9MVdWF7jXTcWLor8SxHF5zvFKU4oQ88Hjcd9waeNwNMleG\ns/9DmFxNgG1U9S036UGc0BceXvDEaa4shhELphSMms7nwIneiaoOdLdLLMcJXDdIVZOCkbnuo199\nSZtwfisCfK6qXdO09bPv+A7gZlV93ueOygdPHk8Ww4gFcx8ZNZ03gPoicp4vbWv37wTgPNcthIjs\n5m7Wk47ZQAsR6eqWrysie6Up24Qt4ZD9e/CuxtmKNQlVXQWsEJFD3KQzgLdSyxlG3Ngbh1GjcQeH\n/wzcIiKX4Azw/gwMxXHPtMWJfy9u3p9D6lrvuppud909dXB2qfs8oPhw4EkRWYGjmLyxivHAU+5u\nXYNSrvkrcI+7ccs8oG/2d2wY+WGzjwzDMIwE5j4yDMMwEphSMAzDMBKYUjAMwzASmFIwDMMwEphS\nMAzDMBKYUjAMwzASmFIwDMMwEvw/7YrDG2x4G3cAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fb6d6ab79e8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n/PHHAIwePZorrriCO+64g4YNG3LHHXewaNEiHn30UQ4dOsQbb7xBeno6F1xwAe+88w4VK1Zk3759\njBo1im3btiEiTJ8+nU8++YT69eszZswYAB566CEaN27sTYglIaANzSISJyKbRCRBRB7OZ/9oEflN\nRFaJyPci0jaQ8eTr1VedqqOhQ50JcPLz4IMwezYASYcPUx6fbFrEvcDz5s1j+fLlLFu2LP8CcXEc\nnDqVVKBVq1bcddddxMbGAm71E0B6OnMPHuTpNm1o164dt99+O7179y7OuzQm6DZu3Mj999/P+vXr\nadCgAZMnT2bFihWsXr2aL774gvXr1+d5zpEjR7j66qtZvXo1l156KTNmzMhTZsyYMQwZMoRrrrmG\np59+mr3upFULFixg586dLF26lFWrVvHjjz/y448/MnnyZC688EJWrVqVJyEAfPTRR/Tu3ZvWrVtT\nuXJlVq9eDTif5YULF7Js2TJWr17N3//+dwBuv/127r//flavXs2PP/7o1/hj9erV49dff6V///70\n79+f5cuXs3r1alq0aMFbb70FwD333EOvXr1Ys2YNK1eupE2bNtx55528/fbbgDPMzQcffMCf/vQn\n//4B/BSwKwURiQCmAr2ARGC5iMxVVd9/+fdUdZpbvh/wAhAXqJjylZLiDFqXkgK7duVfZvp0p7H4\ntts4mZlJOcBbM+rnpZ9v43AOrVqxNy2NU8DIkSPp1asXqampOccxysigzubN3Pfss9z3wAN+vjFz\nrjuTX/SB1KJFC7p27epdj4+P54033iAzM5M9e/awfv162rbN+buwYsWK3HDDDQBcdNFFfOfT9uZx\n4403smXLFj777DMWLlxI586dWbduHZ9//rl3HeD48eP8/vvvRX5px8fHe6tmBw4cSHx8PJ06dWLx\n4sXceeed3na8WrVqkZyczMGDB+nbty/g/40fA9zb2MGp7ho/fjwpKSkcO3aMPn36APDNN9/w/vvv\nAxAZGUm1atWoVq0aVatW5bfffmPHjh1069atxGsNAll91A1IUNWtACLyPnAT4E0Kquo7p2RlnE5Y\npcvTm7hixRw9i8eNG8e3334LwOfHjvHx7Nm8snIlt2zcyAWAt3nXz6Rw991306ZNG672mTHtu+++\n44UHH6Tu/v1UJLtKyPO3WrVqOWMMsbpHY4qjss9c5Js3b+bFF19k2bJl1KhRgzvuuCPfe+t9G6Yj\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fb6d6ab7898>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "# Plot loss over time\n",
    "plt.plot(loss_vec, 'k-')\n",
    "plt.title('Cross Entropy Loss per Generation')\n",
    "plt.xlabel('Generation')\n",
    "plt.ylabel('Cross Entropy Loss')\n",
    "plt.show()\n",
    "\n",
    "# Plot train and test accuracy\n",
    "plt.plot(train_acc, 'k-', label='Train Set Accuracy')\n",
    "plt.plot(test_acc, 'r--', label='Test Set Accuracy')\n",
    "plt.title('Train and Test Accuracy')\n",
    "plt.xlabel('Generation')\n",
    "plt.ylabel('Accuracy')\n",
    "plt.legend(loc='lower right')\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
